#include <myhead.h>
#include "myprotocol.h"
#include "cgic.h"
#define MYPATH "/home/linux"
char ID[20] = {0};
char PS[20] = {0};
char id[20] = "admin"; // 测试阶段
char ps[20] = "888888";

int key;
int msgid;
myprotocol_t buf;

// int semid;

long myuid;

char clean_buf[1024] = {0};
void alarm_handler(int arg)
{
	// 非阻塞的方式读走消息队列中的消息
	msgrcv(msgid,clean_buf,sizeof(clean_buf),BOA_TO_SER_ISONLINE,IPC_NOWAIT);

	printf("Content-type: text/html;charset=\"UTF-8\"\n\n");
	printf("<!DOCTYPE html>");
	printf("<html>");
	printf("<body>");
	printf("<center>");
	printf("<h1>网络似乎不太好</h1>"); // 输出错误信息( 大标题 )
	printf("<br>");					   // 换行
	printf("</center>");
	printf("</body>");
	printf("</html>");
	exit(-1);
}

int cgiMain(int argc, const char *argv[])
{
	// 注册alarm信号处理函数 用于超时处理
	signal(SIGALRM, alarm_handler);
	
	myuid = 0; // 修改

	key = ftok(MYPATH, 'A');
	if (-1 == key)
	{
		perror("ftok error");
		return -1;
	}
	msgid = msgget(key, IPC_CREAT | 0666);
	if (-1 == msgid)
	{
		perror("msgget error");
		return -1;
	}

	cgiFormString("ID", ID, 20);
	cgiFormString("PASSWORD", PS, 20); // cgi脚本获取表单数据

	char *temp = ID;

	while (*temp)
	{
		myuid += *temp;
		temp++;
	}
	if (!strcmp(ID, id) && !strcmp(PS, ps))
	{
		buf.msgtype = BOA_TO_SER_ISONLINE; // 这里不需要把消息类型变为uid 因为我深知对方是单线程
		buf.uid = myuid;
		strcpy(buf.user_info.id, ID);
		strcpy(buf.user_info.pw, PS);

		if (-1 == msgsnd(msgid, &buf, sizeof(myprotocol_t) - sizeof(buf.msgtype), 0))
		{
			perror("msgsnd error");
			return -1;
		}
		alarm(4);
		if (-1 == msgrcv(msgid, &buf, sizeof(myprotocol_t) - sizeof(buf.msgtype), myuid * 2, 0))
		{
			perror("msgrcv error");
			return -1;
		}

		if (buf.user_info.flag == 1)
		{
			// 下位机在线
			printf("Set-Cookie:username=%s;path=/;\n",ID);//设置cookie // 必须放在固定语句的上面
			printf("Content-type: text/html;charset=\"UTF-8\"\n\n"); // 固定格式 必须要加
			printf("<!DOCTYPE html>"); // 输出html格式
			printf("<html>");
			printf("<body>");
			printf("<center>");													   // 居中
																				   // ↓自动跳转 .location.href( 超文本(可链接)引用的文件 ) = '跳转的页面'
			printf("<script>window.location.href = '/Iot_select.html';</script>"); // script脚本标签内的内容是js代码
			printf("</center>");
			printf("</body>");
			printf("</html>");
		}
		else
		{
			printf("Content-type: text/html;charset=\"UTF-8\"\n\n"); // 固定格式 必须要加
			printf("<!DOCTYPE html>");
			printf("<html>");
			printf("<body>");
			printf("<center>");
			printf("<h1>下位机未连接</h1>"); // 输出错误信息( 大标题 )
			printf("<br>");					 // 换行
			// printf("<a href=\"/index.html\" target=\"blank\">返回重新输入</a>"); // 超链接, target = blank新窗口打开
			printf("<a href=\"/index.html\">返回重新输入</a>");
			printf("</center>");
			printf("</body>");
			printf("</html>");
		}
	}
	else
	{
		printf("Content-type: text/html;charset=\"UTF-8\"\n\n"); // 固定格式 必须要加
		printf("<!DOCTYPE html>");
		printf("<html>");
		printf("<body>");
		printf("<center>");
		printf("<h1>用户名密码错误</h1>"); // 输出错误信息( 大标题 )
		printf("<br>");					   // 换行
		// printf("<a href=\"/index.html\" target=\"blank\">返回重新输入</a>"); // 超链接, target = blank新窗口打开
		printf("<a href=\"/index.html\">返回重新输入</a>");
		printf("</center>");
		printf("</body>");
		printf("</html>");
	}

	return 0;
}